// 本文件是 Generator 的核心入口
// 需要导出一个继承自 Yeoman Generator 的类型
// Yeoman Generator 在工作时会自动调用我们在此类型方法中定义的一些生命周期方法
// 在这些方法中可以通过调用父类提供的一些工具方法实现我们想要的功能，比如文件写入

const Generator = require('yeoman-generator')

module.exports = class extends Generator {
  // 3 接收用户输入
  prompting() {
    // yeoman 在询问用户环节会自动调用此方法
    // 在此方法中可以调用父类的 prompt() 方法发出对用户的命令行询问
    return this.prompt([
      {
        type: 'input',
        name: 'name',
        message: 'Your project name',
        default: this.appname // 项目生成目录的名称
      },
      {
        type: 'input',
        name: 'success',
        message: 'success?',
        default: false, 
      }
    ]).then(answers => {
      // answers => { name: 'user input value }
      this.answers = answers
    })
  }

  writing() {
    // Yeoman 自动在生成文件阶段调用此方法

    // 1 写入文件到目标目录
    /* this.fs.write(
      this.destinationPath('temp.txt'),
      Math.random().toString()
    ) */


    // 2 通过模板方式写入文件到目标目录
    // 模板文件路径
    /* const tmp = this.templatePath('foo.txt')
    // 输出模板路径
    const output = this.destinationPath('foo.txt')
    // 模板数据上下文
    const context = { title: 'Hello shuang~', success: true }
    this.fs.copyTpl(tmp, output, context) */


    // 3 接收用户输入
    const tmp = this.templatePath('bar.html')
    // 输出模板路径
    const output = this.destinationPath('bar.html')
    // 模板数据上下文
    const context = this.answers
    this.fs.copyTpl(tmp, output, context)

    const tmp2 = this.templatePath('foo.txt')
    const output2 = this.destinationPath('foo.txt')
    const context2 = { name: this.answers.name, success: this.answers.success }
    this.fs.copyTpl(tmp2, output2, context2)

  }
}